package _剑指offer._设计模式;

/**
 * 工厂模式，将具体类的实例化延迟到每个子类的工厂，工厂类只提供必要的方法接口
 * 与简单工厂相比，每个子类都要有自己的工厂用于实例化自己的实例
 * 优点：如果新增一个类，不需要修改工厂类，只需要新增一个自己类的工厂
 * @author Liu Huan
 */
class NewUser {
	public static void main(String[] args) {
		FactoryPattern factoryPattern = new FactoryNewProA();
		NewProduct newProduct = factoryPattern.createNewProduct();
		newProduct.print();
		
		FactoryPattern factoryPattern1 = new FactoryNewProB();
		final NewProduct newProduct1 = factoryPattern1.createNewProduct();
		newProduct1.print();
	}
}

public interface FactoryPattern {
	NewProduct createNewProduct();
}

class FactoryNewProA implements FactoryPattern {
	@Override
	public NewProduct createNewProduct() {
		return new NewProA();
	}
}

class FactoryNewProB implements FactoryPattern {
	@Override
	public NewProduct createNewProduct() {
		return new NewProB();
	}
}

interface NewProduct {
	void print();
}

class NewProA implements NewProduct {
	@Override
	public void print() {
		System.out.println("我是 NewProA ");
	}
}

class NewProB implements NewProduct {
	@Override
	public void print() {
		System.out.println("我是 NewProB ");
	}
}